#ifndef INFOPANEL_H
#define INFOPANEL_H

#include <QWidget>
#include <QVBoxLayout>
#include <QTableWidget>
#include <QListWidget>
#include <QGroupBox>
#include <QHeaderView>
#include <QTextEdit>
#include <QLabel>
#include <QPushButton>
#include <QHBoxLayout>
#include <QFileDialog>
#include <QDateTime>
#include <QDebug>
#include <QComboBox>
#include "logmanager.h"

class InfoPanel : public QWidget
{
    Q_OBJECT

public:
    explicit InfoPanel(QWidget *parent = nullptr);
    ~InfoPanel();

    // 添加一条窗口消息记录
    void addWindowMessage(const QString &time, const QString &msg);

    // 添加一条图文警情
    void addGraphicAlarm(const QString &message);

    // 切换显示标签页（图文警情 / 视频轮询）
    void setCurrentTab(const QString &tabName);
    
    // 清空窗口信息表格
    void clearWindowMessages();
    
    // 清空图文警情列表
    void clearGraphicAlarms();
    
    // 获取窗口信息数量
    int getWindowMessageCount() const;
    
    // 获取图文警情数量
    int getGraphicAlarmCount() const;
    
    // 获取当前标签页名称
    QString getCurrentTab() const;
    
    // 设置窗口信息组的可见性
    void setWindowInfoVisible(bool visible);
    
    // 设置图文警情组的可见性
    void setGraphicAlarmVisible(bool visible);
    
    // 设置日志显示组的可见性
    void setLogVisible(bool visible);
    
    // 查询日志文件
    void queryLogFile();
    
    // 辅助方法
    QString getSelectedDate();
    QString readLogFile(const QString &date);
    QString readLogFilesForWeek();
    QString filterLogByLevel(const QString &logContent, const QString &level);

private:
    QTableWidget *windowInfoTable;
    QListWidget *graphicAlarmList;
    QGroupBox *windowInfoGroup;
    QGroupBox *graphicAlarmGroup;
    
    // 日志显示相关控件
    QGroupBox *logGroup;
    QTextEdit *logDisplay;
    QPushButton *refreshLogButton;
    QPushButton *exportLogButton;
    QLabel *logPathLabel;
    
    // 日志查询相关控件
    QComboBox *dateComboBox;
    QComboBox *levelComboBox;
    QPushButton *queryLogButton;

    QVBoxLayout *mainLayout;

    // 标签页切换控件
    QWidget *tabWidget;
    
    // 日志相关函数
    void loadLogFile(const QString &date);
    QString getCurrentDate() const;

private slots:
    // 图形报警项被点击
    // 参数: item - 被点击的项
    void onGraphicAlarmClicked(QListWidgetItem *item);

    // 窗口信息项被双击
    // 参数: row - 被双击的行
    // 参数: column - 被双击的列
    void onWindowInfoDoubleClicked(int row, int column);

signals:
    // 通知主窗口：用户查看某条警情详情
    // 参数: alarmId - 警情ID
    void alarmViewed(const QString &alarmId);

    // 通知主窗口：用户点击了某个消息
    // 参数: message - 消息内容
    void messageClicked(const QString &message);
};

#endif // INFOPANEL_H
